﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLVatTu.Class;
using QLVatTu.InPhieu;
using System.Globalization;

namespace QLVatTu.NghiepVu
{
    public partial class frmPhieuNhapMua : Form
    {
        KetNoiDB cn = new KetNoiDB();
        public string MaPhieuNhap = "";
        public string PhieuYeuCauNhap = "";

        public frmPhieuNhapMua()
        {
            InitializeComponent();
        }

        private void loadData()
        {
            cbbCongTrinhDuAn.DataSource = cn.getTable("select * from tbl_CongTrinhDuAn");
            cbbCongTrinhDuAn.DisplayMember = "TenCongTrinhDuAn";
            cbbCongTrinhDuAn.ValueMember = "MaCongTrinhDuAn";

            cbbLoaiPhieu.DataSource = cn.getTable("select * from tbl_LoaiPhieu where MaLoaiPhieu='LP001'");
            cbbLoaiPhieu.DisplayMember = "TenLoaiPhieu";
            cbbLoaiPhieu.ValueMember = "MaLoaiPhieu";

            cbbDoiTac.DataSource = cn.getTable("select * from tbl_DoiTac where NhaCungCap=1");
            cbbDoiTac.DisplayMember = "TenDoiTac";
            cbbDoiTac.ValueMember = "MaDoiTac";

            cbbKhoNhap.DataSource = cn.getTable("select * from tbl_Kho");
            cbbKhoNhap.DisplayMember = "TenKho";
            cbbKhoNhap.ValueMember = "MaKho";

            cbbXacNhan.SelectedIndex = 0;

            DataTable dt = new DataTable();

            //load cbbPhieuYeuCauNhap
            if (PhieuYeuCauNhap == "")
            {
                dt = cn.getTable("select SoPhieu from tbl_PhieuYeuCauNhap where TrangThai=1");
            }
            else
            {
                dt = cn.getTable("select SoPhieu from tbl_PhieuYeuCauNhap where SoPhieu='" + PhieuYeuCauNhap + "'");
            }
            DataRow dr = dt.NewRow();
            dr["SoPhieu"] = "---Danh sách phiếu---";
            dt.Rows.InsertAt(dr, 0);
            cbbPhieuYeuCau.DataSource = dt;
            cbbPhieuYeuCau.DisplayMember = "SoPhieu";
            cbbPhieuYeuCau.ValueMember = "SoPhieu";

            string sql = "";
            if (MaPhieuNhap == "")
            {
                //Thêm
                txtSoPhieu.Text = cn.SinhMa("SoPhieu", "tbl_PhieuNhapKho", "PN");
            }
            else
            {
                //Sửa
                btnLuu.Enabled = true;
                txtSoPhieu.Text = MaPhieuNhap;
                cbbDoiTac.Enabled = false;
                cbbPhieuYeuCau.Enabled = false;
                txtSoHD.Enabled = false;
                //load thong tin nhap kho sửa
                sql = "select * from tbl_PhieuNhapKho where SoPhieu='" + MaPhieuNhap + "'";
                dt = cn.getTable(sql);
                if (dt.Rows.Count > 0)
                {
                    dtpNgayLap.Value = DateTime.Parse(dt.Rows[0]["NgayNhap"].ToString());
                    cbbDoiTac.SelectedValue = dt.Rows[0]["MaDoiTac"].ToString();
                    cbbKhoNhap.SelectedValue = dt.Rows[0]["MaKho"].ToString();
                    txtNhanVien.Text = dt.Rows[0]["NguoiNhan"].ToString();
                    txtDienGiai.Text = dt.Rows[0]["DienGiai"].ToString();
                    cbbLoaiPhieu.SelectedValue = dt.Rows[0]["MaLoaiPhieu"].ToString();
                    cbbCongTrinhDuAn.SelectedValue = dt.Rows[0]["MaCongTrinhDuAn"].ToString();
                    txtSoHD.Text=dt.Rows[0]["SoHD"].ToString();

                    string MaPhieuYeuCau = dt.Rows[0]["MaPhieuYeuCau"].ToString();
                    cbbPhieuYeuCau.Text = MaPhieuYeuCau;

                    //load dgvPhieuDuTru
                    load_dgvPhieuYeuCau(MaPhieuYeuCau);
                    dgvPhieuYeuCau.Enabled = false;
                    btnChon.Enabled = false;
                    ckbChonHet.Enabled = false;

                    //load dgvChiTietNhap
                    float SoLuongYeuCau = 0;
                    float SoLuongDaNhap = 0;
                    //float SoLuongDaNhapChoPhieuNay = 0;
                    int stt = 0;

                    sql = @"SELECT     dbo.tbl_ChiTietPhieuNhap.MaVatTu, dbo.tbl_VatTu.TenVatTu, dbo.tbl_ChiTietPhieuNhap.MaDonViTinh, dbo.tbl_DonViTinh.TenDonViTinh, 
                                                  dbo.tbl_ChiTietPhieuNhap.SoLuong, tbl_ChiTietPhieuNhap.DonGia
                            FROM         dbo.tbl_ChiTietPhieuNhap INNER JOIN
                                                  dbo.tbl_DonViTinh ON dbo.tbl_ChiTietPhieuNhap.MaDonViTinh = dbo.tbl_DonViTinh.MaDonViTinh INNER JOIN
                                                  dbo.tbl_VatTu ON dbo.tbl_ChiTietPhieuNhap.MaVatTu = dbo.tbl_VatTu.MaVatTu
                            WHERE     dbo.tbl_ChiTietPhieuNhap.SoPhieu = '" + MaPhieuNhap + "'";
                    dt = cn.getTable(sql);
                    if (dt.Rows.Count > 0)
                    {
                        foreach (DataRow drct in dt.Rows)
                        {
                            stt++;

                            DataGridViewRow dgvRowChiTiet = (DataGridViewRow)dgvChiTietNhap.Rows[0].Clone();
                            dgvRowChiTiet.Cells[1].Value = stt.ToString();
                            dgvRowChiTiet.Cells[2].Value = drct["TenVatTu"].ToString();
                            dgvRowChiTiet.Cells[3].Value = drct["TenDonViTinh"].ToString();

                            sql = @"select SoLuong 
                                    from tbl_ChiTietPhieuYeuCauNhap 
                                    where SoPhieu='" + MaPhieuYeuCau + "' and MaVatTu='" + drct["MaVatTu"].ToString() + @"'
                                    group by SoLuong";
                            DataTable dtSoLuongYeuCau = cn.getTable(sql);
                            if (dtSoLuongYeuCau.Rows.Count > 0) SoLuongYeuCau = float.Parse(dtSoLuongYeuCau.Rows[0]["SoLuong"].ToString());
                            dgvRowChiTiet.Cells[4].Value = SoLuongYeuCau;

                            sql = @"SELECT	SUM(dbo.tbl_ChiTietPhieuNhap.SoLuong) as SoLuongDaNhap
                                FROM         dbo.tbl_PhieuNhapKho INNER JOIN
                                                      dbo.tbl_ChiTietPhieuNhap ON dbo.tbl_PhieuNhapKho.SoPhieu = dbo.tbl_ChiTietPhieuNhap.SoPhieu
                                WHERE dbo.tbl_ChiTietPhieuNhap.SoPhieu != '" + MaPhieuNhap + "' and tbl_PhieuNhapKho.XacNhan=1 AND dbo.tbl_PhieuNhapKho.MaPhieuYeuCau='" + MaPhieuYeuCau + "' AND dbo.tbl_ChiTietPhieuNhap.MaVatTu ='" + drct["MaVatTu"].ToString() + @"'
                                group by tbl_ChiTietPhieuNhap.SoLuong";
                            DataTable dtSoLuongDaNhap = cn.getTable(sql);
                            if (dtSoLuongDaNhap.Rows.Count > 0) SoLuongDaNhap = float.Parse(dtSoLuongDaNhap.Rows[0]["SoLuongDaNhap"].ToString());
                            dgvChiTietNhap.Columns[5].HeaderText = "Số lượng đã nhập trước khi lập phiếu";
                            dgvRowChiTiet.Cells[5].Value = SoLuongDaNhap;

//                            sql = @"
//                                    SELECT     SoPhieu, MaVatTu, SoLuong as SoLuongDaNhapChoPhieuNay
//                                    FROM         dbo.tbl_ChiTietPhieuNhap
//                                    WHERE SoPhieu = '" + MaPhieuNhap + "' AND MaVatTu = '" + drct["MaVatTu"].ToString() + "'";
//                            DataTable dtSoLuongDaNhapChoPhieuNay = cn.getTable(sql);
//                            if (dtSoLuongDaNhapChoPhieuNay.Rows.Count > 0) SoLuongDaNhapChoPhieuNay = float.Parse(dtSoLuongDaNhapChoPhieuNay.Rows[0]["SoLuongDaNhapChoPhieuNay"].ToString());

                            double SoLuongConThieu = 0;
                            SoLuongConThieu = Math.Round(SoLuongYeuCau - SoLuongDaNhap, 2);

                            double SoLuongConThieuTruocKhiLapPhieuNay = SoLuongConThieu;

                            dgvChiTietNhap.Columns[6].HeaderText="Số lượng còn thiếu trước khi lập phiếu";
                            dgvRowChiTiet.Cells[6].Value = SoLuongConThieuTruocKhiLapPhieuNay;

                            //Lấy tên nhà cung cấp
                            sql = "select TenDoiTac from tbl_DoiTac where MaDoiTac='" + cbbDoiTac.SelectedValue.ToString() + "'";
                            string DoiTac = cn.LayDuLieu(sql);
                            dgvRowChiTiet.Cells[7].Value = DoiTac;

                            dgvRowChiTiet.Cells[8].Value = drct["SoLuong"].ToString();
                            dgvRowChiTiet.Cells[9].Value = drct["DonGia"].ToString();

                            double ThanhTien = double.Parse(drct["SoLuong"].ToString()) * double.Parse(drct["DonGia"].ToString());
                            dgvRowChiTiet.Cells[10].Value = ThanhTien;

                            dgvRowChiTiet.Cells[11].Value = drct["MaVatTu"].ToString();
                            dgvRowChiTiet.Cells[12].Value = drct["MaDonViTinh"].ToString();
                            dgvChiTietNhap.Rows.Add(dgvRowChiTiet);
                        }
                    }
                }
            }
        }
        private void frmPhieuNhapMua_Load(object sender, EventArgs e)
        {
            if (cn.KetNoi())
            {
                loadData();
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void load_dgvPhieuYeuCau(string MaPhieuYeuCau)
        {
            cbbCongTrinhDuAn.SelectedValue = cn.LayDuLieu("select MaCongTrinhDuAn from tbl_PhieuYeuCauNhap where SoPhieu='" + MaPhieuYeuCau + "'");
            string sql = @"SELECT   row_number() over(order by tbl_ChiTietPhieuYeuCauNhap.SoPhieu) as STT,  dbo.tbl_ChiTietPhieuYeuCauNhap.MaVatTu, dbo.tbl_VatTu.TenVatTu, dbo.tbl_ChiTietPhieuYeuCauNhap.MaDonViTinh, dbo.tbl_DonViTinh.TenDonViTinh, 
                                                  dbo.tbl_ChiTietPhieuYeuCauNhap.SoLuong
                            FROM         dbo.tbl_ChiTietPhieuYeuCauNhap INNER JOIN
                                                  dbo.tbl_DonViTinh ON dbo.tbl_ChiTietPhieuYeuCauNhap.MaDonViTinh = dbo.tbl_DonViTinh.MaDonViTinh INNER JOIN
                                                  dbo.tbl_VatTu ON dbo.tbl_ChiTietPhieuYeuCauNhap.MaVatTu = dbo.tbl_VatTu.MaVatTu
                            WHERE     dbo.tbl_ChiTietPhieuYeuCauNhap.SoPhieu = '" + MaPhieuYeuCau + "'";
            DataTable dtYeuCau = cn.getTable(sql);
            dgvPhieuYeuCau.Rows.Clear();
            dgvChiTietNhap.Rows.Clear();
            ckbChonHet.Checked = false;
            if (dtYeuCau.Rows.Count > 0)
            {
                foreach (DataRow dr in dtYeuCau.Rows)
                {
                    DataGridViewRow dgvr = (DataGridViewRow)dgvPhieuYeuCau.Rows[0].Clone();
                    dgvr.Cells[1].Value = dr["STT"].ToString();
                    dgvr.Cells[2].Value = dr["TenVatTu"].ToString();
                    dgvr.Cells[3].Value = dr["TenDonViTinh"].ToString();
                    dgvr.Cells[4].Value = dr["SoLuong"].ToString();

                    float SoLuongDaNhap = 0;
                    sql = @"SELECT     SUM(dbo.tbl_ChiTietPhieuNhap.SoLuong) AS SoLuongDaNhap
                            FROM         dbo.tbl_ChiTietPhieuNhap INNER JOIN
                                                  dbo.tbl_PhieuNhapKho ON dbo.tbl_ChiTietPhieuNhap.SoPhieu = dbo.tbl_PhieuNhapKho.SoPhieu
                            WHERE     dbo.tbl_PhieuNhapKho.MaPhieuYeuCau = '" + cbbPhieuYeuCau.SelectedValue.ToString() + "' and tbl_PhieuNhapKho.XacNhan=1 AND dbo.tbl_ChiTietPhieuNhap.MaVatTu = '" + dr["MaVatTu"].ToString() + @"'
                            GROUP BY dbo.tbl_ChiTietPhieuNhap.MaVatTu";
                    DataTable dtSoLuong = cn.getTable(sql);
                    if (dtSoLuong.Rows.Count == 1)
                    {
                        SoLuongDaNhap = float.Parse(dtSoLuong.Rows[0]["SoLuongDaNhap"].ToString());
                    }
                    dgvr.Cells[5].Value = SoLuongDaNhap;

                    dgvr.Cells[6].Value = dr["MaVatTu"].ToString();
                    dgvr.Cells[7].Value = dr["MaDonViTinh"].ToString();
                    dgvPhieuYeuCau.Rows.Add(dgvr);
                }
            }
            foreach (DataGridViewRow dgvr in dgvPhieuYeuCau.Rows)
            {
                if (dgvr.IsNewRow) continue;
                dgvr.Cells[0].Value = ckbChonHet.Checked;
            }
        }

        private void cbbPhieuYeuCau_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbbPhieuYeuCau.SelectedValue != null)
            {
                load_dgvPhieuYeuCau(cbbPhieuYeuCau.SelectedValue.ToString());
            }
            else
            {
                dgvPhieuYeuCau.Rows.Clear();
            }
        }

        private void load_dgvChiTietNhap()
        {
            dgvChiTietNhap.Rows.Clear();
            int stt = 0;
            string sql = "";
            float SoLuongDaNhap = 0;
            float SoLuongCanNhap = 0;
            float SoLuongYeuCau = 0;

            foreach (DataGridViewRow dgvr in dgvPhieuYeuCau.Rows)
            {
                if (dgvr.IsNewRow) continue;
                if (dgvr.Cells[0].Value != null && bool.Parse(dgvr.Cells[0].Value.ToString()) == true && dgvr.Cells["TenVatTu"].Value != null)
                {
                    stt++;
                    DataGridViewRow dgvrPN = (DataGridViewRow)dgvChiTietNhap.Rows[0].Clone();
                    dgvrPN.Cells[1].Value = stt;
                    dgvrPN.Cells[2].Value = dgvr.Cells["TenVatTu"].Value.ToString();
                    dgvrPN.Cells[3].Value = dgvr.Cells["TenDonViTinh"].Value.ToString();
                    dgvrPN.Cells[4].Value = dgvr.Cells["SoLuong"].Value.ToString();

                    double SoLuongConThieu = 0;
                    SoLuongConThieu = Math.Round(SoLuongYeuCau - SoLuongDaNhap, 2);

                    SoLuongDaNhap = float.Parse(dgvr.Cells["SoLuongDaNhap"].Value.ToString());
                    dgvrPN.Cells[5].Value = SoLuongDaNhap;

                    SoLuongYeuCau = float.Parse(dgvr.Cells["SoLuong"].Value.ToString());
                    SoLuongCanNhap = SoLuongYeuCau - SoLuongDaNhap;

                    if (SoLuongCanNhap <= 0)
                    {
                        continue;
                    }
                    else
                    {
                        dgvrPN.Cells[6].Value = SoLuongCanNhap;
                        dgvrPN.Cells[8].Value = SoLuongCanNhap;
                    }

                    //lấy nhà cung cấp
                    sql = @"SELECT     dbo.tbl_DoiTac.TenDoiTac
                             FROM         dbo.tbl_DoiTac INNER JOIN
                                                      dbo.tbl_VatTuNhaCungCap ON dbo.tbl_DoiTac.MaDoiTac = dbo.tbl_VatTuNhaCungCap.MaDoiTac 
                             where tbl_DoiTac.MaDoiTac='" + cbbDoiTac.SelectedValue.ToString() + "' and tbl_VatTuNhaCungCap.MaVatTu='" + dgvr.Cells["MaVatTu"].Value.ToString() + "'";
                    DataTable dtDoiTac = cn.getTable(sql);
                    if (dtDoiTac.Rows.Count == 0)
                    {
                        continue;
                    }
                    else
                    {
                        dgvrPN.Cells[7].Value = dtDoiTac.Rows[0]["TenDoiTac"].ToString();
                    }

                    dgvrPN.Cells[11].Value = dgvr.Cells["MaVatTu"].Value.ToString();
                    dgvrPN.Cells[12].Value = dgvr.Cells["MaDonViTinh"].Value.ToString();
                    dgvChiTietNhap.Rows.Add(dgvrPN);

                    foreach (DataGridViewRow dgvrCTN in dgvChiTietNhap.Rows)
                    {
                        if (dgvrCTN.IsNewRow) continue;
                        dgvrCTN.Cells[0].Value = false;
                    }
                }
            }

        }

        private void cbbDoiTac_SelectedIndexChanged(object sender, EventArgs e)
        {
            load_dgvChiTietNhap();
        }

        bool IsValid()
        {
            bool kt = true;

            if (txtSoHD.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập số hóa đơn", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtSoHD.Focus();
                kt = false;
            }

           else if (txtNhanVien.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập tên nhân viên lập phiếu", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtNhanVien.Focus();
                kt = false;
            }

            else if (dgvChiTietNhap.Rows.Count == 1)
            {
                MessageBox.Show("Bạn chưa chọn nhập thông tin vật tư.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cbbPhieuYeuCau.Focus();
                return false;
            }

            else
            {
                if (cbbPhieuYeuCau.SelectedIndex > 0)
                {
                    string sql = "select NgayLap from tbl_PhieuYeuCauNhap where SoPhieu='" + cbbPhieuYeuCau.SelectedValue.ToString() + "'";
                    DateTime dtNgayYeuCau = DateTime.Parse(cn.LayDuLieu(sql));

                    if (dtpNgayLap.Value < dtNgayYeuCau || dtpNgayLap.Value > DateTime.Now)
                    {
                        MessageBox.Show("Ngày lập phiếu nhập mua không nhỏ hơn ngày dự trù: " + dtNgayYeuCau.ToString("dd/MM/yyyy") + " hoặc lớn hơn ngày hiện tại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        dtpNgayLap.Focus();
                        kt = false;
                    }
                }
            }
            //if (cbbPhieuYeuCau.Text == "---Danh sách phiếu---" && MaPhieuNhap == null)
            //{
            //    MessageBox.Show("Bạn chưa chọn phiếu yêu câu nhập.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            //    cbbPhieuYeuCau.Focus();
            //    kt= false;
            //}

            foreach (DataGridViewRow dgvr in dgvChiTietNhap.Rows)
            {
                if (dgvr.IsNewRow) continue;

                if (dgvr.Cells["SoLuongCT"].Value == null)
                {
                    dgvr.Cells["SoLuongCT"].ErrorText = "Lỗi: " + dgvChiTietNhap.Columns[dgvr.Cells["SoLuongCT"].ColumnIndex].HeaderText + " chưa được nhập ";
                    kt = false;
                }
                else
                {
                    string strSoLuongCT;
                    double SoLuongCT = 0;

                    string strSoLuongYeuCau;
                    double SoLuongYeuCauCT = 0;

                    string strSoLuongConThieu;
                    double SoLuongConThieu = 0;

                    string strDonGia;
                    double DonGia = 0;

                    string strSoLuongDaNhap;
                    double SoLuongDaNhapCT = 0;

                    //Kiểm tra sau dấu ',','.' ô số lượng
                    if (dgvr.Cells["SoLuongCT"].Value.ToString().Contains(','))
                    {
                        strSoLuongCT = dgvr.Cells["SoLuongCT"].Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuongCT = dgvr.Cells["SoLuongCT"].Value.ToString();
                    }
                    double.TryParse(strSoLuongCT, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongCT);

                    //Kiểm tra cột số lượng đã nhập
                    if (dgvr.Cells["SoLuongDaNhapCT"].Value.ToString().Contains(','))
                    {
                        strSoLuongDaNhap = dgvr.Cells["SoLuongDaNhapCT"].Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuongDaNhap = dgvr.Cells["SoLuongDaNhapCT"].Value.ToString();
                    }
                    double.TryParse(strSoLuongDaNhap, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongDaNhapCT);

                    //Kiểm tra cột số lượng yêu cầu
                    if (dgvr.Cells["SoLuongYeuCau"].Value.ToString().Contains(','))
                    {
                        strSoLuongYeuCau = dgvr.Cells["SoLuongYeuCau"].Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuongYeuCau = dgvr.Cells["SoLuongYeuCau"].Value.ToString();
                    }
                    double.TryParse(strSoLuongYeuCau, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongYeuCauCT);

                    //Kiểm tra cột số lượng còn thiếu
                    if (dgvr.Cells["SoLuongConThieu"].Value.ToString().Contains(','))
                    {
                        strSoLuongConThieu = dgvr.Cells["SoLuongConThieu"].Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuongConThieu = dgvr.Cells["SoLuongConThieu"].Value.ToString();
                    }
                    double.TryParse(strSoLuongConThieu, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongConThieu);

                    if (SoLuongCT <= 0)
                    {
                        dgvr.Cells["SoLuongCT"].ErrorText = "Lỗi: " + dgvChiTietNhap.Columns[dgvr.Cells["SoLuongCT"].ColumnIndex].HeaderText + " phải là số. Không được nhỏ hơn hoặc bằng 0 ";
                        kt = false;
                    }

                    else
                    {
                        dgvr.Cells["SoLuongCT"].ErrorText = "";
                    }

                    if (SoLuongCT > SoLuongYeuCauCT && SoLuongConThieu == 0)
                    {
                        dgvr.Cells["SoLuongCT"].ErrorText = "Lỗi: " + dgvChiTietNhap.Columns[dgvr.Cells["SoLuongCT"].ColumnIndex].HeaderText + " không được lớn hơn số lượng đã yêu cầu";
                        kt = false;
                    }

                    else if (SoLuongCT > SoLuongYeuCauCT && SoLuongConThieu > 0)
                    {
                        dgvr.Cells["SoLuongCT"].ErrorText = "";

                        dgvr.Cells["SoLuongCT"].ErrorText = "Lỗi: " +dgvChiTietNhap.Columns[dgvr.Cells["SoLuongCT"].ColumnIndex].HeaderText+ " không được lớn hơn số lượng đã yêu cầu";
                        kt = false;
                    }
                    else if (SoLuongCT > SoLuongConThieu)
                    {
                        dgvr.Cells["SoLuongCT"].ErrorText = "Lỗi: " + dgvChiTietNhap.Columns[dgvr.Cells["SoLuongCT"].ColumnIndex].HeaderText + " không được lớn hơn số lượng còn thiếu";
                        kt = false;
                    }
                    else
                    {
                        //dgvr.Cells["SoLuongCT"].ErrorText = "";
                        if (dgvr.Cells["DonGia"].Value == null)
                        {
                            dgvr.Cells["DonGia"].ErrorText = "Lỗi: " + dgvChiTietNhap.Columns[dgvr.Cells["DonGia"].ColumnIndex].HeaderText + " chưa được nhập";
                            kt = false;
                        }
                        else
                        {
                            dgvr.Cells["DonGia"].ErrorText = "";

                            if (dgvr.Cells["DonGia"].Value.ToString().Contains(','))
                            {
                                strDonGia = dgvr.Cells["DonGia"].Value.ToString().Replace(',', '.');
                            }
                            else
                            {
                                strDonGia = dgvr.Cells["DonGia"].Value.ToString();
                            }

                            double.TryParse(strDonGia, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out DonGia);

                            if (DonGia <= 0)
                            {
                                dgvr.Cells["DonGia"].ErrorText = "Lỗi: " + dgvChiTietNhap.Columns[dgvr.Cells["DonGia"].ColumnIndex].HeaderText + " phải là số. Không được nhỏ hơn hoặc bằng 0";
                                kt = false;
                            }
                            else
                            {
                                dgvr.Cells["DonGia"].ErrorText = "";
                            }
                        }
                    }
                }
            }
            return kt;
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (IsValid())
            {
                string SoPhieu = txtSoPhieu.Text;
                string NgayNhap = dtpNgayLap.Value.ToString();
                string MaDoiTac = cbbDoiTac.SelectedValue.ToString();
                string MaKho = cbbKhoNhap.SelectedValue.ToString();
                string NguoiNhan = txtNhanVien.Text;
                string DienGiai = txtDienGiai.Text;
                string MaLoaiPhieu = cbbLoaiPhieu.SelectedValue.ToString();
                string MaCongTrinhDuAn = cbbCongTrinhDuAn.SelectedValue.ToString();
                string MaPhieuYeuCau = cbbPhieuYeuCau.SelectedValue.ToString();

                byte XacNhan = 0;
                if (cbbXacNhan.Text == "Đã xác nhận")
                {
                    XacNhan = 1;
                }

                double SoLuong = 0;
                string SoLuongCT;

                string strDonGia;
                double DonGia = 0;

                if (MaPhieuNhap == "")
                {
                    cn.Insert_Table("tbl_PhieuNhapKho", "SoPhieu,NgayNhap,MaDoiTac,MaKho,NguoiNhan,DienGiai,MaLoaiPhieu,MaCongTrinhDuAn,MaPhieuYeuCau,XacNhan,SoHD", "'" + SoPhieu + "','" + NgayNhap + "','" + MaDoiTac + "','" + MaKho + "',N'" + NguoiNhan + "',N'" + DienGiai + "','" + MaLoaiPhieu + "','" + MaCongTrinhDuAn + "','" + MaPhieuYeuCau + "','"+XacNhan+"',N'"+txtSoHD.Text+"'");

                    foreach (DataGridViewRow dgvr in dgvChiTietNhap.Rows)
                    {

                        if (dgvr.IsNewRow) continue;

                        if (dgvr.Cells["SoLuongCT"].Value.ToString().Contains(','))
                        {
                            SoLuongCT = dgvr.Cells["SoLuongCT"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            SoLuongCT = dgvr.Cells["SoLuongCT"].Value.ToString();
                        }
                        double.TryParse(SoLuongCT, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuong);

                        if (dgvr.Cells["DonGia"].Value.ToString().Contains(','))
                        {
                            strDonGia = dgvr.Cells["DonGia"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            strDonGia = dgvr.Cells["DonGia"].Value.ToString();
                        }
                        double.TryParse(strDonGia, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out DonGia);

                        //Insert tbl_ChiTietPhieuNhap
                        cn.Insert_Table("tbl_ChiTietPhieuNhap", "SoPhieu,MaVatTu,MaDonViTinh,SoLuong,SoLuongPhePham,DonGia", "'" + SoPhieu + "','" + dgvr.Cells["MaVatTuCT"].Value.ToString() + "','" + dgvr.Cells["MaDonViTinhCT"].Value.ToString() + "','" + SoLuong.ToString().Replace(",", ".") + "','0','" + DonGia.ToString().Replace(",", ".") + "'");

                        if (XacNhan == 1)
                        {
                            //Insert tbl_LuuKho
                            cn.Insert_Table("tbl_LuuKho", "SoPhieu,MaKho,MaVatTu,SoLuong,SoLuongPhePham,NgayCapNhat", "'" + SoPhieu + "','" + MaKho + "','" + dgvr.Cells["MaVatTuCT"].Value.ToString() + "','" + SoLuong.ToString().Replace(",", ".") + "','0','" + NgayNhap + "'");
                        }
                    }
                    HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Thêm phiếu nhập mua.");
                    MessageBox.Show("Thêm phiếu thành công");
                }
                else
                {
                    cn.Update_Table("tbl_PhieuNhapKho", "NgayNhap='" + NgayNhap + "',MaKho='" + MaKho + "',NguoiNhan=N'" + NguoiNhan + "',DienGiai=N'" + DienGiai + "',XacNhan='"+XacNhan+"'", "SoPhieu='" + SoPhieu + "'");
                    cn.Delete_Table("tbl_ChiTietPhieuNhap", "SoPhieu='" + SoPhieu + "'");

                    foreach (DataGridViewRow dgvr in dgvChiTietNhap.Rows)
                    {
                        if (dgvr.IsNewRow) continue;
                        if (dgvr.Cells["SoLuongCT"].Value.ToString().Contains(','))
                        {
                            SoLuongCT = dgvr.Cells["SoLuongCT"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            SoLuongCT = dgvr.Cells["SoLuongCT"].Value.ToString();
                        }
                        double.TryParse(SoLuongCT, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuong);

                        if (dgvr.Cells["DonGia"].Value.ToString().Contains(','))
                        {
                            strDonGia = dgvr.Cells["DonGia"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            strDonGia = dgvr.Cells["DonGia"].Value.ToString();
                        }
                        double.TryParse(strDonGia, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out DonGia);

                        cn.Insert_Table("tbl_ChiTietPhieuNhap", "SoPhieu,MaVatTu,MaDonViTinh,SoLuong,SoLuongPhePham,DonGia", "'" + SoPhieu + "','" + dgvr.Cells["MaVatTuCT"].Value.ToString() + "','" + dgvr.Cells["MaDonViTinhCT"].Value.ToString() + "','" + SoLuong.ToString().Replace(",", ".") + "','0','" + dgvr.Cells["DonGia"].Value.ToString() + "'");

                        if (XacNhan == 1)
                        {
                            cn.Insert_Table("tbl_LuuKho", "SoPhieu,MaKho,MaVatTu,SoLuong,SoLuongPhePham,NgayCapNhat", "'" + SoPhieu + "','" + MaKho + "','" + dgvr.Cells["MaVatTuCT"].Value.ToString() + "','" + SoLuong.ToString().Replace(",", ".") + "','0','" + NgayNhap + "'");
                        }
                    }
                    HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Sửa phiếu nhập mua.");
                    MessageBox.Show("Cập nhật thành công");
                }
                this.Close();
            }

        }

        private void dgvPhieuYeuCau_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvPhieuYeuCau.RowCount > 0 && e.ColumnIndex == 0)
            {
                if (!dgvPhieuYeuCau.Rows[e.RowIndex].IsNewRow && dgvPhieuYeuCau.Rows[e.RowIndex].Cells[0].Value != null)
                {
                    bool Checked = bool.Parse(dgvPhieuYeuCau.Rows[e.RowIndex].Cells[0].Value.ToString());
                    dgvPhieuYeuCau.Rows[e.RowIndex].Cells[0].Value = !Checked;
                    dgvPhieuYeuCau.EndEdit();
                }
            }
        }

        private void dgvChiTietNhap_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 8 || e.ColumnIndex == 9 && dgvChiTietNhap.Rows[e.RowIndex].Cells[8].Value != null && dgvChiTietNhap.Rows[e.RowIndex].Cells[9].Value != null)
            {
                DataGridViewTextBoxCell txtSoLuong = (DataGridViewTextBoxCell)dgvChiTietNhap.Rows[e.RowIndex].Cells[8];
                DataGridViewTextBoxCell txtDonGia = (DataGridViewTextBoxCell)dgvChiTietNhap.Rows[e.RowIndex].Cells[9];
                DataGridViewTextBoxCell txtThanhTien = (DataGridViewTextBoxCell)dgvChiTietNhap.Rows[e.RowIndex].Cells[10];

                string strSoLuong = "0";
                double SoLuong = 0;

                string strDonGia = "0";
                double DonGia = 0;

                if (txtSoLuong.Value != null)
                {
                    if (txtSoLuong.Value.ToString().Contains(','))
                    {
                        strSoLuong = txtSoLuong.Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuong = txtSoLuong.Value.ToString();
                    }
                }

                double.TryParse(strSoLuong, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuong);

                if (txtDonGia.Value != null)
                {
                    strDonGia = txtDonGia.Value.ToString();
                }

                double.TryParse(strDonGia, out DonGia);

                txtThanhTien.Value = SoLuong * DonGia;
            }
        }

        private void dgvChiTietNhap_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
        }

        private void btnHuy_Click(object sender, EventArgs e)
        {
            load_dgvChiTietNhap();
        }

        private void ckbChonHet_Click(object sender, EventArgs e)
        {
            if (dgvPhieuYeuCau.RowCount > 0)
            {
                foreach (DataGridViewRow dgvr in dgvPhieuYeuCau.Rows)
                {
                    if (dgvr.IsNewRow) continue;
                    dgvr.Cells[0].Value = ckbChonHet.Checked;
                }
                dgvPhieuYeuCau.EndEdit();
            }
        }

        private void btnChon_Click(object sender, EventArgs e)
        {
            if (cbbDoiTac.SelectedValue == null)
            {
                MessageBox.Show("Bạn chưa chọn nhà cung cấp.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            else
            {
                load_dgvChiTietNhap();
            }
        }

        private void btnXoaChon_Click(object sender, EventArgs e)
        {
            for (int i = dgvChiTietNhap.Rows.Count - 1; i >= 0; i--)
            {
                if (dgvChiTietNhap.Rows[i].Cells[0].Value != null)
                {
                    dgvChiTietNhap.Rows.RemoveAt(i);
                }
            }
        }

        private void dgvChiTietNhap_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvChiTietNhap.RowCount > 0 && e.ColumnIndex == 0)
            {
                if (!dgvChiTietNhap.Rows[e.RowIndex].IsNewRow && dgvChiTietNhap.Rows[e.RowIndex].Cells[0].Value != null)
                {
                    bool Checked = bool.Parse(dgvChiTietNhap.Rows[e.RowIndex].Cells[0].Value.ToString());
                    dgvChiTietNhap.Rows[e.RowIndex].Cells[0].Value = !Checked;
                }
            }
        }
    }
}
